package controller;

import java.io.Serializable;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import java.text.ParseException;

import dao.TaikhoanDAO;

import pojo.Binhluan;
import pojo.Hoadon;
import pojo.Taikhoan;

@ManagedBean(name = "trangDangKyBean")
@ViewScoped
public class TrangDangKyBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Taikhoan taikhoandangky;
	private String ngay;
	private String thang;
	private String nam;
	private String confirmPassword;
	private String validaccmess;
	private String validdatemess;
	private String validpassmess;
	private String validcfrpassmess;
	private String validphonenumbermess;
	private String validemailmess;

	public TrangDangKyBean() {
		taikhoandangky = new Taikhoan();
	}

	public boolean CheckValidAcc() {
		TaikhoanDAO tkDAO = new TaikhoanDAO();

		String username = taikhoandangky.getTendangnhap();
		
		if(username.isEmpty())
		{
			validaccmess = "Tên đăng nhập không được để trống";
			return false;
		}
		
		if(username.length() < 6 )
		{
			validaccmess = "Tên đăng nhập phải có ít nhất 6 kí tự.";
			return false;
		}
		
		if (tkDAO.IsValidUsername(username))
		{
			validaccmess = "Tên đăng nhập đã tồn tại";
			return false;
		}
		
		validaccmess = "";
		return true;
	}

	public boolean CheckValidDate() {
		if (ngay == null)
			ngay = "0";

		if (thang == null)
			thang = "0";

		if (nam == null)
			nam = "0";

		if (isDateValid(ngay, thang, nam)
				|| (ngay.equals("0") && thang.equals("0") && nam.equals("0"))) {
			validdatemess = "";
		} else
		{
			validdatemess = "Ngày này không tồn tại.";
			return false;
		}
		return true;
	}

	public boolean CheckValidPass() {
		validpassmess = "";
		
		String password = taikhoandangky.getMatkhau();
		
		if(password.isEmpty())
		{
			validpassmess = "Mật khẩu không được để trống";
			return false;
		}
		
		if(password.length() < 6 )
		{
			validpassmess = "Mật khẩu phải có ít nhất 6 kí tự.";
			return false;
		}
		
		return true;
	}

	public boolean CheckValidCfrpass() {
		String password = taikhoandangky.getMatkhau();
		validcfrpassmess = "";
			
		if(confirmPassword == null || confirmPassword.isEmpty())
		{
			validcfrpassmess = "Xác nhận mật khẩu không được để trống";
			return false;
		}	
		
		if(password == null || password.isEmpty())
			return false;
		
		if(!password.equals(confirmPassword))
		{
			validcfrpassmess = "Xác nhận mật khẩu không chính xác.";
			return false;
		}
		 
		return true;
	}

	public boolean CheckValidPhonenumber()
	{
		String phonenumber = taikhoandangky.getSodienthoai();
		
		if(phonenumber == null || phonenumber.isEmpty())
		{
			validphonenumbermess = "Số điện thoại không được để trống.";
			return false;
		}
		
		try
		{
		Long.parseLong(phonenumber);
		}
		catch(Exception ex)
		{
			validphonenumbermess = "Chỉ được nhập số.";
			return false;
		}
		
		validphonenumbermess="";
		return true;
	}
	
	public boolean CheckValidEmail()
	{
		String email = taikhoandangky.getEmail();
		
		if(email == null || email.isEmpty())
		{
			validemailmess = "Email không được để trống";
			return false;
		}	
		validemailmess="";
		return true;
	}
	
	private boolean isDateValid(String day, String month, String year) {
		String date = String.format("%s-%s-%s", day, month, year);

		DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
		df.setLenient(false);

		try {
			Date validdate = df.parse(date);
			return true;
		} catch (ParseException e) {
			return false;
		}

	}

	public String DangKy() {
		if(KiemTraInput())
		{
			TaikhoanDAO tkDAO = new TaikhoanDAO();
			
			Date ngaysinh = new Date(Integer.parseInt(nam), Integer.parseInt(thang), Integer.parseInt(ngay));
			taikhoandangky.setNgaysinh(ngaysinh);
			taikhoandangky.setEmail("134@12343");
			taikhoandangky.setSodienthoai("1234");
			tkDAO.saveOrUpdate(taikhoandangky);
			
			return "TrangDangKyThanhCong?faces-redirect=true";
		}
		return null;
	}

	private boolean KiemTraInput() {
		boolean AccResult = CheckValidAcc();
		boolean DateResult = CheckValidDate();
		boolean PassResult = CheckValidPass();
		boolean CfrpassResult = CheckValidCfrpass();
		boolean PhoneResult = CheckValidPhonenumber();
		boolean EmailResult = CheckValidEmail();
		
		if(AccResult && DateResult && PassResult && CfrpassResult && PhoneResult && EmailResult)
			return true;
		
		return false;
	}

	public Taikhoan getTaikhoandangky() {
		return taikhoandangky;
	}

	public void setTaikhoandangky(Taikhoan taikhoandangky) {
		this.taikhoandangky = taikhoandangky;
	}

	public String getNgay() {
		return ngay;
	}

	public void setNgay(String ngay) {
		this.ngay = ngay;
	}

	public String getThang() {
		return thang;
	}

	public void setThang(String thang) {
		this.thang = thang;
	}

	public String getNam() {
		return nam;
	}

	public void setNam(String nam) {
		this.nam = nam;
	}

	public String getConfirmPassword() {
		return confirmPassword;
	}

	public void setConfirmPassword(String confirmPassword) {
		this.confirmPassword = confirmPassword;
	}

	public String getValidaccmess() {
		return validaccmess;
	}

	public void setValidaccmess(String validaccmess) {
		this.validaccmess = validaccmess;
	}

	public String getValiddatemess() {
		return validdatemess;
	}

	public void setValiddatemess(String validdatemess) {
		this.validdatemess = validdatemess;
	}

	public String getValidpassmess() {
		return validpassmess;
	}

	public void setValidpassmess(String validpassmess) {
		this.validpassmess = validpassmess;
	}

	public String getValidcfrpassmess() {
		return validcfrpassmess;
	}

	public void setValidcfrpassmess(String validcfrpassmess) {
		this.validcfrpassmess = validcfrpassmess;
	}

	public String getValidphonenumbermess() {
		return validphonenumbermess;
	}

	public void setValidphonenumbermess(String validphonenumbermess) {
		this.validphonenumbermess = validphonenumbermess;
	}

	public String getValidemailmess() {
		return validemailmess;
	}

	public void setValidemailmess(String validemailmess) {
		this.validemailmess = validemailmess;
	}
	

}